Telegram Group & Telegram Channel
🐍 Хитрая задача на Python: замыкание + nonlocal

📌 Задача:
Напиши функцию counter(start), которая возвращает функцию-счётчик. Каждый вызов этой функции увеличивает значение на 1.

Пример:


c = counter(10)
print(c()) # 11
print(c()) # 12
print(c()) # 13

d = counter(100)
print(d()) # 101
print(c()) # 14 ← работает независимо


🎯 Подвох:
- Нельзя использовать глобальные переменные
- Нужно использовать замыкание
- Без nonlocal — не заработает

Решение:


def counter(start):
count = start
def inner():
nonlocal count
count += 1
return count
return inner

# Проверка
a = counter(5)
print(a()) # 6
print(a()) # 7

b = counter(100)
print(b()) # 101
print(a()) # 8


🧠 Объяснение подвоха:

- counter возвращает функцию, внутри которой count сохраняется в замыкании
- nonlocal нужен, чтобы изменить внешнюю переменную, а не просто читать её
- Каждое замыкание имеет своё независимое состояние

⚠️ Без nonlocal count, Python создаст локальную count внутри inner(), и UnboundLocalError — гарантирован

🛠️ Применяется в:

• Реализации генераторов состояния
• Мини-хранилищах внутри функций
• Кеширующих функциях и декораторах

@python_job_interview



tg-me.com/python_job_interview/1108
Create:
Last Update:

🐍 Хитрая задача на Python: замыкание + nonlocal

📌 Задача:
Напиши функцию counter(start), которая возвращает функцию-счётчик. Каждый вызов этой функции увеличивает значение на 1.

Пример:


c = counter(10)
print(c()) # 11
print(c()) # 12
print(c()) # 13

d = counter(100)
print(d()) # 101
print(c()) # 14 ← работает независимо


🎯 Подвох:
- Нельзя использовать глобальные переменные
- Нужно использовать замыкание
- Без nonlocal — не заработает

Решение:


def counter(start):
count = start
def inner():
nonlocal count
count += 1
return count
return inner

# Проверка
a = counter(5)
print(a()) # 6
print(a()) # 7

b = counter(100)
print(b()) # 101
print(a()) # 8


🧠 Объяснение подвоха:

- counter возвращает функцию, внутри которой count сохраняется в замыкании
- nonlocal нужен, чтобы изменить внешнюю переменную, а не просто читать её
- Каждое замыкание имеет своё независимое состояние

⚠️ Без nonlocal count, Python создаст локальную count внутри inner(), и UnboundLocalError — гарантирован

🛠️ Применяется в:

• Реализации генераторов состояния
• Мини-хранилищах внутри функций
• Кеширующих функциях и декораторах

@python_job_interview

BY Python вопросы с собеседований


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/python_job_interview/1108

View MORE
Open in Telegram


Python вопросы с собеседований Telegram | DID YOU KNOW?

Date: |

A project of our size needs at least a few hundred million dollars per year to keep going,” Mr. Durov wrote in his public channel on Telegram late last year. “While doing that, we will remain independent and stay true to our values, redefining how a tech company should operate.

Importantly, that investor viewpoint is not new. It cycles in when conditions are right (and vice versa). It also brings the ineffective warnings of an overpriced market with it.Looking toward a good 2022 stock market, there is no apparent reason to expect these issues to change.

Python вопросы с собеседований from us


Telegram Python вопросы с собеседований
FROM USA